perm filename WINSUB.FAI[VIS,HPM]2 blob
sn#110596 filedate 1974-07-09 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00009 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE WINSUB
C00003 00003 PERUSE: 0
C00007 00004 VARIAN: 0
C00009 00005 CLN: 0
C00010 00006 CLNX: 0
C00011 00007 ***** SAIL INTERFACE ********
C00012 00008
C00014 00009 CLEAN: MOVEM 12,ACS12
C00015 ENDMK
C⊗;
TITLE WINSUB
INTERN WIND,HORWIN,VERWIN
ENTRY INIWIN,DOWIN,BSTCOR,CLEAN
EXTERN PICWID,PICLIN,PICHIG,PICBIT,PICWIZ
EXTERN ROWTAB,COLTAB
WIND: 0
HORWIN: 0
VERWIN: 0
MAXWID←←2000
MAXLIN←←25
STRIP: BLOCK MAXWID
STRIP2: BLOCK MAXLIN*MAXWID
A←ARRY2←ARRYO←BESTY←3 ↔ ARRY1←ARRY←CNT2←BESTX←4 ↔ DX1←VW←0
B←T←16 ↔ C←TX←STRP←2 ↔ D←PT←PNT←5 ↔ TY←CNT←6
SUMSQ←E←TXX←HC←7 ↔ PND←DX2←VC←10 ↔ PNC←X1←D1C←11
PNE←Y1←D2C←12 ↔ PN1←X2←CNT1←13
CC←Y2←TOP←14 ↔ DY1←POS←15 ↔ SUM←1 ↔ DL←17
FOR I←-100,-1,1 { I*I
}
SQRS: FOR I←0,100,1 {I*I
}
PERUSE: 0
MOVN T,HORWIN
HRRM T,CV
HRRM T,CV+2
HRRM T,CW
HRRM T,CW+1
ADDI T,1
HRRM T,DV
HRRM T,DV+2
HRRM T,DW
HRRM T,DW+1
ADDI T,1
HRRM T,EV
HRRM T,EV+2
HRRM T,EW
HRRM T,EW+1
MOVN STRP,PICWIZ
IMUL STRP,WIND
SUB STRP,PICWIZ
HRLZ STRP,STRP
HRLZ PNT,PICBIT
LSH PNT,6
ADDI PNT,-1(ARRY)
MOVE CNT,[SUB T,STRIP(POS)]
ADD CNT,PICWIZ
MOVEM CNT,PP
MOVEM CNT,PP0
ADDI CNT,1
MOVEM CNT,PP1
SUBI ARRYO,1
MOVE VW,VERWIN
SETZ SUM,
VERLP: MOVE CNT,STRP
UNPAK: ILDB T,PNT
MOVEM T,STRIP(CNT)
AOBJN CNT,UNPAK
MOVE CNT,HORWIN
SETZB POS,TOP
KLP: SETZB HC,VC
SETZB D1C,D2C
MOVE CNT2,WIND
JLP: MOVE CNT1,WIND
ILP: MOVE T,STRIP(POS)
SUB T,STRIP+1(POS)
ADD HC,SQRS(T)
MOVE T,STRIP(POS)
PP: SUB T,STRIP+1(POS) ;REPLACED BY STRIP+<PICWID>(POS)
ADD VC,SQRS(T)
MOVE T,STRIP(POS)
PP1: SUB T,STRIP+1(POS) ;REPLACED BY STRIP +<PICWID>+1
ADD D1C,SQRS(T)
MOVE T,STRIP+1(POS)
PP0: SUB T,STRIP+1(POS) ;REPLACED BY STRIP+<PICWID>
ADD D2C,SQRS(T)
ADD POS,PICWIZ
SOJG CNT1,ILP
AOS POS,TOP
SOJG CNT2,JLP
CAMLE HC,VC
MOVE HC,VC
CAMLE HC,D1C
MOVE HC,D1C
CAMLE HC,D2C
MOVE HC,D2C
ADD SUM,HC
TRZ HC,1 ;THE LOCAL MAXIMUM TEST
MOVEI T,1
CAMGE HC,(ARRYO)
AOJA HC,CW
ORM T,(ARRYO)
CV: CAMGE HC,HORWIN(ARRYO) ;R HALF BECOMES -<HORWIN>
AOJA HC,DW
ORM T,HORWIN(ARRYO) ;BECOMES -<HORWIN>(ARRYO)
DV: CAMGE HC,1+HORWIN(ARRYO) ;BECOMES 1-<HORWIN>
AOJA HC,EW
ORM T,1+HORWIN(ARRYO) ;1-<HORWIN>
EV: CAMGE HC,2+HORWIN(ARRYO) ;2-<HORWIN>
AOJA HC,LOOF
ORM T,2+HORWIN(ARRYO) ;2-<HORWIN>
JRST LOOF
CW: CAMLE HC,HORWIN(ARRYO) ;-<HORWIN>
ORM T,HORWIN(ARRYO) ;-<HORWIN>
DW: CAMLE HC,1+HORWIN(ARRYO) ;1-<HORWIN>
ORM T,1+HORWIN(ARRYO) ;1-<HORWIN>
EW: CAMLE HC,2+HORWIN(ARRYO) ;2-<HORWIN>
ORM T,2+HORWIN(ARRYO) ;2-<HORWIN>
LOOF: PUSH ARRYO,HC
SOJG CNT,KLP
SUB PNT,PICLIN
SOJG VW,VERLP
JRST @PERUSE
VARIAN: 0
SCANS: 0
SETZ TX,
SETZB SUM,SUMSQ
MOVE TY,Y1
LY1: MOVE PT,ARRY1
ADD PT,ROWTAB-1(TY)
ADD PT,COLTAB-2(X1)
HLL TX,X1
LX1: ILDB T,PT
ADD SUM,T
ADD SUMSQ,SQRS(T)
MOVEM T,STRIP(TX)
AOBJN TX,LX1
AOBJN TY,LY1
IMUL SUM,SUM
IDIV SUM,DX1
IDIV SUM,DY1
SUB SUMSQ,SUM
MOVEM SUMSQ,VARIAN
MOVE TY,Y2
SETZ TX,
LY2: MOVE PT,ARRY2
ADD PT,ROWTAB-1(TY)
ADD PT,COLTAB-2(X2)
HLL TX,X2
LX2: ILDB T,PT
MOVEM T,STRIP2(TX)
AOBJN TX,LX2
AOBJN TY,LY2
HLLZ X1,X1
HLLZ Y1,Y1
HLLZ X2,X2
HLLZ Y2,Y2
SUB X2,X1
SUB X2,[1,,0]
SUB Y2,Y1
SUB Y2,[1,,0]
MOVE DL,DX2
SUB DL,DX1
HRLZI SUM,377777
SETZ BESTY,
SETZ TXX,
SCY: HLL TXX,X2
SCX: SETZB TX,BESTX
MOVEI T,STRIP2(TXX)
HRRM T,SCAX
MOVE TY,Y1
SCAY: HLL TX,X1
SCAX: MOVE T,STRIP2(TX)
SUB T,STRIP(TX)
ADD BESTX,SQRS(T)
AOBJN TX,SCAX
ADDM DL,SCAX
AOBJN TY,SCAY
CAML BESTX,SUM
JRST .+3
BTST: MOVE SUM,BESTX
HRRZ BESTY,TXX
AOBJN TXX,SCX
ADD TXX,DX1
AOBJN Y2,SCY
IDIV BESTY,DX2
ASH SUM,4
IDIV SUM,VARIAN
JRST @SCANS
CLN: 0
MOVE CNT,PICWIZ
SUBI CNT,2
MOVE A,PICHIG
SUBI A,2
IMUL CNT,A
HRLZ PND,PICBIT
LSH PND,6
ADDI PND,-1(ARRY)
MOVE PNC,PND
ADD PNC,PICLIN
ILDB B,PNC
MOVE PNE,PNC
ADD PNE,PICLIN
ILDB A,PNC
MOVE PN1,PNC
ILDB CC,PNC
IBP PND
ILDB D,PND
ILDB E,PNE
WOOP: MOVE C,CC
CAMLE B,C
EXCH B,C
CAMLE D,E
EXCH D,E
CAMLE B,D
EXCH B,D
CAMLE C,E
EXCH C,E
CAMLE C,D
EXCH C,D
CAMLE A,D
DPB D,PN1
CAMGE A,C
DPB C,PN1
MOVE PN1,PNC
MOVE B,A
MOVE A,CC
ILDB CC,PNC
ILDB D,PND
ILDB E,PNE
SOJG CNT,WOOP
JRST @CLN
CLNX: 0
MOVE CNT,PICWIZ
MOVE A,PICHIG
SUBI A,2
IMUL CNT,A
HRLZ PND,PICBIT
LSH PND,6
ADDI PND,-1(ARRY)
MOVE PNC,PND
ADD PNC,PICLIN
MOVE PNE,PNC
ADD PNE,PICLIN
ILDB D,PND
ILDB C,PNC
ILDB E,PNE
WOOF: CAMG C,D
JRST CLD
CAMGE D,E
MOVE D,E
CAMLE C,D
DPB D,PNC
JRST NXQ
CLD: CAMLE D,E
MOVE D,E
CAMGE C,D
DPB D,PNC
NXQ: ILDB D,PND
ILDB C,PNC
ILDB E,PNE
SOJG CNT,WOOF
JRST @CLN
;***** SAIL INTERFACE ********
P←17
ACS12: 0
ACS16: 0
ACS17: 0
RETAD: 0
INIWIN: POP P,RETAD
POP P,WIND
MOVE 1,PICWID
SUBI 1,1
IDIV 1,WIND
MOVEM 1,HORWIN
MOVE 1,PICHIG
SUBI 1,1
IDIV 1,WIND
MOVEM 1,VERWIN
JRST @RETAD
DOWIN: MOVEM 12,ACS12
MOVEM 16,ACS16
POP P,RETAD
POP P,ARRYO
POP P,ARRY
MOVEM 17,ACS17
JSR PERUSE
MOVE 12,ACS12
MOVE 16,ACS16
MOVE 17,ACS17
IDIV SUM,HORWIN
IDIV SUM,VERWIN
JRST @RETAD
DAX1: 0
DAY1: 0
DAX2: 0
DAY2: 0
BSTCOR: MOVEM 12,ACS12
MOVEM 16,ACS16
POP P,RETAD
POP P,DAY2
POP P,DAX2
POP P,DAY1
POP P,DAX1
POP P,ARRY2
POP P,Y1
POP P,X1
POP P,T
SUBI Y1,-1(T)
HRRE DY1,Y1
MOVN Y1,Y1
HRLZ Y1,Y1
HRR Y1,T
POP P,T
SUBI X1,-1(T)
HRRE DX1,X1
MOVN X1,X1
HRLZ X1,X1
HRR X1,T
POP P,ARRY1
MOVE Y2,@DAY2
MOVE T,@DAY1
SUBI Y2,-1(T)
MOVN Y2,Y2
HRLZ Y2,Y2
HRR Y2,T
MOVE X2,@DAX2
MOVE T,@DAX1
SUBI X2,-1(T)
HRRE DX2,X2
MOVN X2,X2
HRLZ X2,X2
HRR X2,T
MOVEM 17,ACS17
JSR SCANS
DIVTT: ADDB BESTX,@DAX1
ADD BESTX,DX1
SUBI BESTX,1
MOVEM BESTX,@DAX2
ADDB BESTY,@DAY1
ADD BESTY,DY1
SUBI BESTY,1
MOVEM BESTY,@DAY2
MOVE 12,ACS12
MOVE 16,ACS16
MOVE 17,ACS17
JRST @RETAD
CLEAN: MOVEM 12,ACS12
MOVEM 16,ACS16
POP P,RETAD
POP P,ARRY
MOVEM 17,ACS17
JSR CLN
MOVE 12,ACS12
MOVE 16,ACS16
MOVE 17,ACS17
JRST @RETAD
END